/*
 * Instance.h
 *
 *  Created on: Jan 15, 2012
 *      Author: luiz
 */

#ifndef INSTANCE_H_
#define INSTANCE_H_

#include <vector>
#include <string>

#include "Output.h"
#include "Layer.h"
#include "TruthTable.h"
#include "../Model/EvaluationFunction.h"
class Instance
{
    int number_of_positions_occupied_by_cell_;
    int number_of_cells_;
    std::string description_;
    std::string file_name_;
    Layer *layer_default_;
    TruthTable *truth_table_;
    TruthTable *entry_table_;
    EvaluationFunction *evaluation_function_;

public:
    Instance();
    virtual ~Instance();
    Instance& operator=(const Instance & instance);
    Instance(const Instance & instance);

    int num_outputs() const;

    int number_inputs() const;

    int number_of_positions_occupied_by_cell() const;
    void set_number_of_positions_occupied_by_cell(int num);

    int number_of_cells();
    void set_number_of_cells(int number_of_cells);

    void set_description(std::string description);
    std::string description();

    void set_layer_default(Layer &layer_default);
    Layer *get_layer_default();
    Layer get_layer_default()const;

    TruthTable  * truth_table();
    void set_truth_table(const TruthTable & truth_table);

    TruthTable * entry_table();
    void set_entry_table(const TruthTable & entry_table);

    EvaluationFunction *evaluation_function();
    void set_evaluation_funcion(EvaluationFunction *evaluation);

    std::string file_name();
    void set_file_name(const std::string &file_name);

};
#endif /* INSTANCE_H_ */
